package pri.damai.xiaowu.common.core.util;

import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
 *
 * @Desc
 * @Author yxf
 * @Date 2022/3/20 15:56
 * 但行好事，莫问前程。
 */
public class MoneyUtils {

    /**
     * 零的表示
     */
    private static final String[] ZERO_STR_ARRAY = {"0.00", "0.0", "0"};

    /**
     * 零的标准化表示
     */
    private static final String STANDARD_ZERO_STR = "0.00";

    /**
     * 整百
     */
    private static final String HUNDRED = "100";

    /**
     * 格式化金钱 保留两位小数
     *
     * @param money BigDecimal
     * @return
     */
    public static String formatMoney(BigDecimal money) {

        BigDecimal result = money.setScale(2, RoundingMode.HALF_UP);

        DecimalFormat df = new DecimalFormat(STANDARD_ZERO_STR);

        return df.format(result);
    }

    /**
     * 元化分
     *
     * @param money
     * @return
     */
    public static Long handleMoney(String money) {

        if (StringUtils.isBlank(money)) {
            return null;
        }

        for (String zero : ZERO_STR_ARRAY) {
            if (zero.equals(money)) {
                return 0L;
            }
        }

        BigDecimal moneyBg = new BigDecimal(money);

        BigDecimal result = moneyBg.multiply(new BigDecimal(HUNDRED));

        BigDecimal bigDecimal = result.setScale(0, RoundingMode.HALF_UP);

        return bigDecimal.longValue();
    }

    /**
     * 分化元
     *
     * @param money
     * @return java.lang.String
     * @author DaMai
     * @date 2020/9/22 15:10
     */
    public static String handleMoney(Long money) {

        if (null == money || money == 0L) {
            return STANDARD_ZERO_STR;
        } else {
            BigDecimal amount = BigDecimal.valueOf(money);
            amount = amount.divide(new BigDecimal(HUNDRED));
            return formatMoney(amount);
        }

    }

    public static void main(String[] args) {

        long l = handleMoney("4.03") * 2;
        String s1 = handleMoney(l);
        System.out.println(s1);
//        Long v = null;
//        String s = handleMoney(v);
//        System.out.println(s);

        String s = formatMoney(new BigDecimal("0.02"));
        System.out.println(s);

        String s2 = formatMoney(new BigDecimal("8.02"));
        System.out.println(s2);

    }

}
